多参数的解析

  有了上述重载解析规则之后,我们就可以保证:当所涉及到的不同类型在计算效率或者精度方面存在明显差异时,被调用将会是最简单的算法(函数)。例如,

    int pow(int, int);
    double pow(double, double);

    complex pow(double, complex);
    complex pow(complex, int);
    complex pow(complex, double);
    complex pow(complex, complex);

    void k(complex z)
    {
        int i = pow(2, 2);                // 调用pow(int, int)
        double d = pow(2.0, 2.0);         // 调用pow(double, double)
        complex z2 = pow(2, z);           // 调用pow(double, complex)
        complex z3 = pow(z, 2);           // 调用pow(complex, int)
        complex z4 = pow(z, z);           // 调用pow(complex, complex)
    }

如果选择过程牵涉到两个或者更多的参数,那么将根据7.4节的规则为每个参数找到最佳匹配。如果有一个函数在某个参数上具有最佳的匹配,而在其他参数的匹配上都优于或者等于其他可能被调用的函数,那么它就会被调用。如果没有这样的函数,这个调用将被看做有歧义而予以拒绝。例如,

    void g()
    {
        double d = pow(2.0, 2);            // 错误❌:pow(int(2.0), 2)或pow(2.0, double(2))?
    }

这个调用具有歧义性,因为对2.0的最佳匹配是pow(double, double),而对2的最佳匹配却是pow(int, int)。

🔚